import mysql from 'mysql2/promise';
import dotenv from 'dotenv';
dotenv.config();

// 创建数据库连接池
let pool = null;

// 数据库连接配置
const connectDB = async () => {
  try {
    // 从环境变量获取MySQL连接信息
    const dbConfig = {
      host: process.env.DB_HOST || 'localhost',
      user: process.env.DB_USER || 'root',
      password: process.env.DB_PASSWORD || '',
      database: process.env.DB_NAME || 'front_end_ctf',
      port: process.env.DB_PORT || 3306,
      waitForConnections: true,
      connectionLimit: 10,
      queueLimit: 0,
      connectTimeout: 10000
    };
    
    console.log(`正在连接MySQL数据库: ${dbConfig.host}:${dbConfig.port}/${dbConfig.database}`);
    console.log(`连接用户: ${dbConfig.user}`);
    
    // 创建连接池
    pool = mysql.createPool(dbConfig);
    
    // 测试连接
    const connection = await pool.getConnection();
    console.log('MySQL数据库连接成功');
    
    // 检查数据库是否存在表，如果需要可以在这里添加初始化表的逻辑
    await initializeTables(connection);
    
    connection.release();
    return pool;
  } catch (error) {
    console.error('MySQL连接失败:', error.message);
    console.error('错误详情:', error);
    console.error('请确保MySQL服务正在运行，并且连接信息正确');
    console.error(`连接信息: 主机=${process.env.DB_HOST || 'localhost'}, 端口=${process.env.DB_PORT || 3306}, 用户名=${process.env.DB_USER || 'root'}, 数据库=${process.env.DB_NAME || 'front_end_ctf'}`);
    console.error('提示: 请确保MySQL服务器已启动，并且创建了相应的数据库和用户');
    
    // 不立即退出进程，允许服务继续运行但会显示数据库连接错误
    console.error('警告: 数据库连接失败，服务可能无法正常工作');
    
    // 返回null表示连接失败
    return null;
  }
};

// 初始化数据库表结构
const initializeTables = async (connection) => {
  try {
    // 在这里可以添加创建表的SQL语句
    // 例如：
    // await connection.query(`
    //   CREATE TABLE IF NOT EXISTS users (
    //     id INT AUTO_INCREMENT PRIMARY KEY,
    //     username VARCHAR(255) NOT NULL UNIQUE,
    //     email VARCHAR(255) NOT NULL UNIQUE,
    //     password VARCHAR(255) NOT NULL,
    //     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    //   )
    // `);
    console.log('数据库表初始化完成');
  } catch (error) {
    console.error('初始化数据库表失败:', error);
  }
};

// 关闭数据库连接
const closeDB = async () => {
  try {
    if (pool) {
      await pool.end();
      console.log('MySQL连接池已关闭');
    }
  } catch (error) {
    console.error('关闭MySQL连接失败:', error);
  }
};

// 导出数据库连接函数
export default {
  connectDB,
  closeDB,
  getPool: () => pool
};
